package com.liu.lab06.controller;

import com.liu.lab06.pojo.Music;
import com.liu.lab06.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class MusicController {

    @Autowired
    private MusicService musicService;


//    mvc 接管所有的 /  请求直接跳转到  Music 首页
//    替换原来的index 首页
    @RequestMapping("/")
    public String redirectToMusicList(Model model) {
        List<Music> allMusics = musicService.getAllMusics();
        model.addAttribute("allMusics", allMusics);
        return "Music";
    }

    // 去添加音乐页面
    @RequestMapping("/toAddMusic")
    public String toAddMusic() {
        return "addMusic"; // 跳转到 addMusic.jsp
    }

    // 处理添加音乐请求
    @PostMapping("/addMusic")
    public String addMusic(Music music) {
        musicService.addMusic(music); // 把数据添加到我们的 数据库
        return "redirect:showAllMusics"; // 添加成功后重定向回音乐列表 重新渲染
    }

    // 显示所有音乐 // 相当于刷新页面了
    @RequestMapping("/showAllMusics")
    public String showAllMusics(Model model) {
        List<Music> allMusics = musicService.getAllMusics();
        model.addAttribute("allMusics", allMusics);
        return "Music"; // 显示 Music.jsp 页面
    }

    // 去修改音乐页面（带参数 id）
    @GetMapping("/toUpdateMusic")
    public String toUpdateMusic(@RequestParam("id") int id, Model model) {
        // 根据 music 的 id 查询我们的音乐数据 =》 需要渲染到我们的updateMusic页面的
        Music music = musicService.getMusicById(id);

        // 添加我们的 数据到 attribute
        model.addAttribute("music", music);
        return "updateMusic"; // 显示 updateMusic.jsp 页面
    }

    // 处理修改音乐请求
    @PostMapping("/updateMusic")
    public String updateMusic(Music music) {
        musicService.updateMusic(music);  // 把数据修改到我们的 数据库
        return "redirect:showAllMusics"; // 修改后跳转回音乐列表
    }

    // 删除音乐
    @GetMapping("/deleteMusic")
    public String deleteMusic(@RequestParam("id") int id) {
        musicService.deleteMusic(id);
        return "redirect:showAllMusics"; // 删除后重定向
    }

    // 模糊搜索音乐（分类）
    @PostMapping("/FindMusic")
    public String findMusic(@RequestParam("category_id") String categoryName, Model model) {

        // 通过 自定义函数 返回分类id的值
        int categoryId = convertCategoryNameToId(categoryName);

        // 然后我们通过id查询实际的音乐
        // 返回一个集合
        List<Music> list = musicService.getMusicsByCategory(categoryId);
        // 设置模型数据
        model.addAttribute("allMusics", list);
        return "Music";
    }

    // 分类名转分类ID
    private int convertCategoryNameToId(String name) {
        switch (name) {
            case "流行": return 1;
            case "古典": return 2;
            case "经典": return 3;
            case "国风": return 4;
            case "儿童": return 5;
            default: return 0;
        }
    }
}
